package com.lovcreate.shop.mapp.util;

import java.util.regex.Pattern;

/**
 * @author 高博
 * @version 1.0
 * @Time 2016-12-19 15:57:15
 * @Descrption 校验器：利用正则表达式校验邮箱、手机号等
 */
public class VerifyUtils {
    /**
     * 正则表达式：验证用户名
     */
    public static final String REGEX_USERNAME = "^[a-zA-Z]\\w{5,17}$";

    /**
     * 正则表达式：验证密码
     */
    public static final String REGEX_PASSWORD = "^[a-zA-Z0-9_\\w\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\+\\=\\{\\}\\[\\]\\:\\;\\\"\\'\\\\\\|\\\\/\\?]{6,18}$";

    /**
     * 正则表达式：验证手机号
     */
    public static final String REGEX_MOBILE = "^1(3|4|5|7|8)\\d{9}$";
    /**
     * 车牌号校验
     */
    public static final String REGEX_PLATE = "[\\u4e00-\\u9fa5][A-z][A-z0-9]{5}";
    /**
     * 车辆类型校验
     */
    public static final String REGEX_CARTYPE = "[0-3]{2}";
    /**
     * 正则表达式：车架号
     */
    public static final String REGEX_CARVIN = "[A-z0-9]{17}";
    /**
     * 正则表达式：发动机号
     */
    public static final String REGEX_ENGINENO = "[0-9]{7,8}";
    /**
     * 正则表达式：验证邮箱
     */
    public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";

    /**
     * 正则表达式：验证汉字
     */
    public static final String REGEX_CHINESE = "^[\u4e00-\u9fa5],{0,}$";

    /**
     * 正则表达式：验证身份证
     */
    public static final String REGEX_ID_CARD = "(\\d{14}[0-9a-zA-Z])|(\\d{16}[0-9a-zA-Z][0-9])|(\\d{16}[0-9a-zA-Z][X])";

    /**
     * 正则表达式：验证URL
     */
    public static final String REGEX_URL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-] ./?%&=]*)?";

    /**
     * 正则表达式：验证IP地址
     */
    public static final String REGEX_IP_ADDR = "(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)";
    /**
     * 正则表达式：验证日期格式
     */
    public static final String REGEX_DATE = "([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})" +
            "-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))";

    /**
     * 校验用户名
     *
     * @param username
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isUsername(String username) {
        return Pattern.matches(REGEX_USERNAME, username);
    }

    /**
     * 校验密码
     *
     * @param password
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isPassword(String password) {
        return Pattern.matches(REGEX_PASSWORD, password);
    }

    /**
     * 校验手机号
     *
     * @param mobile
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isMobile(String mobile) {
        return Pattern.matches(REGEX_MOBILE, mobile);
    }

    /**
     * 校验邮箱
     *
     * @param email
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isEmail(String email) {
        return Pattern.matches(REGEX_EMAIL, email);
    }

    /**
     * 校验汉字
     *
     * @param chinese
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isChinese(String chinese) {
        return Pattern.matches(REGEX_CHINESE, chinese);
    }

    /**
     * 校验身份证
     *
     * @param idCard
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isIDCard(String idCard) {
        return Pattern.matches(REGEX_ID_CARD, idCard);
    }

    /**
     * 校验URL
     *
     * @param url
     * @return 校验通过返回true，否则返回false
     */
    public static boolean isUrl(String url) {
        return Pattern.matches(REGEX_URL, url);
    }

    /**
     * 校验IP地址
     *
     * @param ipAddr
     * @return
     */
    public static boolean isIPAddr(String ipAddr) {
        return Pattern.matches(REGEX_IP_ADDR, ipAddr);
    }

    /**
     * 校验车牌号
     *
     * @param plate
     * @return
     */
    public static boolean isPlate(String plate) {
        return Pattern.matches(REGEX_PLATE, plate);
    }

    /**
     * 车辆类型校验 01小型车 02大型车
     */
    public static boolean isCarType(String carType) {
        return Pattern.matches(REGEX_CARTYPE, carType);
    }

    /**
     * 校验车架号
     */
    public static boolean isCarVin(String carVin) {
        return Pattern.matches(REGEX_CARVIN, carVin);
    }

    /**
     * 校验发动机号
     */
    public static boolean isEngineNo(String engineNo) {
        return Pattern.matches(REGEX_ENGINENO, engineNo);
    }

    /**
     * 校验日期格式
     */
    public static boolean isDate(String date) {
        return Pattern.matches(REGEX_DATE, date);
    }

    /**
     * 测试
     *
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(isPassword("~1j%#5678@456123^^^2#2"));
    }

}
